package com.wx.gof.pattern.creational.builder;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象（internal representation）与产品的生产过程分割开来，
 * 从而可以使一个建造过程生成具有不同的内部表象的产品对象。
 * 描述:
 * 对象只能通过建造器去构建对象，不能对象本身构建。
 * 适应场景：
 * 1.对象构建过程比较复杂
 * 2.对象动态构建，不同的构建的顺序，产生的结果不一样
 * 3.想把对象的使用与创建分离
 * 优点:
 * 1.封装性好，创建和使用分离
 * 2.扩展性好，建造器类之间可以独立，一定程度上解耦
 * 缺点:
 * 1.产生多余的建造器对象
 * 2.被建造对象内部发生修改，建造者都要修改，成本较大
 * 理解:
 * 应用程序-建造者模式(1.创建对象的过程十分复杂,属性特别多的情况可以使用,2.创建对象与使用对象分离可以使用)
 * @Date 2018-12-03-22:12
 */
public class Application {
    public static void main(String[] agrs) {
        //建造者模式V1-组装计算机  构造过程可以自由组合，只需记住最终需要调用build返回构建出来的计算机实体，ComputerBuilder与build之间可以任意构建，哪怕不构建直接build也行
        Computer computer =  new Computer.ComputerBuilder().setKeyboard("机械键盘").setDisplay("12寸显示器").
                setCpu("四核CPU").setProcessor("i7处理器").setGraphicsCard("1080显卡").build();
        System.out.println(computer);
        //建筑者模式V2-组装计算机  构造过程可以自由组合，只需记住最终需要调用build返回构建出来的计算机实体，ComputerBuilder与build之间可以任意构建，哪怕不构建直接build也行
        ComputerV2 computerV2 = new ComputerV2.ComputerBuilderV2().build();
        System.out.println(computerV2);
        ComputerV2 computerV3 = new ComputerV2.ComputerBuilderV2().setDisplay("15寸显示器").build();
        System.out.println(computerV3);
    }
}
